-- ========================================================
-- @File	: scheduler.lua
-- @Brief	: 计划组件
-- @Author	: Leo Zhao
-- @Date	: 2017-11-06
-- ========================================================
Scheduler = Scheduler or {
	tbStart	= {},
	tbPoint	= {},
}

-- 注册启动完成后的回调
function Scheduler.OnStart(f, ...)
	table.insert(Scheduler.tbStart, { fOpt = f, tbParam = {...} });
end

-- 注册时间点
function Scheduler.OnTimePoint(nHMS, f, ...)
	local tbEvent = { fOpt = f, tbParam = {...} };
	Scheduler.tbPoint[nHMS] = Scheduler.tbPoint[nHMS] or {};
	table.insert(Scheduler.tbPoint[nHMS], tbEvent);
end

---------------- 不可使用以下接口 --------------------------

-- 触发启动事件
function Scheduler.Start()
	for _, tbEvent in ipairs(Scheduler.tbStart) do
		xpcall(function()
			Call(tbEvent.fOpt, tbEvent.tbParam);
		end, function(err)
			print_err(err);
		end)
	end
end

-- 触发时间点
function Scheduler.TimePoint(nHMS)
	local tbPoint = Scheduler.tbPoint[nHMS];
	if not tbPoint then return end;

	for _, tbEvent in ipairs(tbPoint) do
		xpcall(function()
			Call(tbEvent.fOpt, tbEvent.tbParam);
		end, function(err)
			print_err(err);
		end);
	end
end